// 给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
// 给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。

var letterCombinations = function(digits) {
  const constract = [, , 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
  if (digits.length === 0) return []
  if (digits.length === 1) return constract[digits[0]].split('')
  let result = constract[digits[0]].split('')
  let recursion = (i) => {
    if (!digits[i]) return result
    let cur = constract[digits[i]].split('')
    let newArr = []
    for (let i = 0, len1 = result.length; i < len1; i++) {
      for (let j = 0, len2 = cur.length; j < len2; j++) {
        newArr.push(`${result[i]}${cur[j]}`)
      }
    }
    result = newArr
    return recursion(i + 1)
  }
  return recursion(1)
};